package com.liunian.test;

import java.util.Arrays;

public class MinimumSize1760 {

	// 其实这道题的本质就是通过二分查找，找到最合适的y
	public int minimumSize(int[] nums, int maxOperations) {
		int left = 1;
		int right = Arrays.stream(nums).max().getAsInt();
		int res = 0;
		while (left <= right) {
			int y = (left + right) / 2;
			int ops = 0;
			for (int num : nums) {
				ops += (num / 2 - 1);
			}
			// 即使ops == maxOperations，也得走这一步，因为你的y有可能选大了
			// 这一步就是让你尽可能选择最小的y
			// 而ops>maxOperations，不满足maxOperations的条件了，所以不给res赋值y
			if (ops <= maxOperations) {
				res = y;
				right = y - 1;
			} else {
				left = y + 1;
			}
		}
		return res;
	}

}
